home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / sbin / dpkg-reconfigure < prev    next >
Text File  |  2009-10-02  |  3KB  |  159 lines

  1. #!/usr/bin/perl -w
  2. # This file was preprocessed, do not edit!
  3.  
  4.  
  5.  
  6. my $infodir="/var/lib/dpkg/info";
  7.  
  8. use strict;
  9. use Debconf::Db;
  10. use Debconf::Gettext;
  11. use Debconf::Template;
  12. use Debconf::Config;
  13. use Debconf::AutoSelect qw(:all);
  14. use Debconf::Log qw(:all);
  15.  
  16. Debconf::Config->priority('low');
  17.  
  18. my $unseen_only=0;
  19. my $all=0;
  20. my $force=0;
  21. my $default_priority=0;
  22. my $reload=1;
  23. Debconf::Config->getopt(
  24. gettext(qq{Usage: dpkg-reconfigure [options] packages
  25.   -a,  --all            Reconfigure all packages.
  26.   -u,  --unseen-only        Show only not yet seen questions.
  27.        --default-priority    Use default priority instead of low.
  28.        --force            Force reconfiguration of broken packages.}),
  29.     "all|a"            => \$all,
  30.     "unseen-only|u"        => \$unseen_only,
  31.     "default-priority"    => \$default_priority,
  32.     "force"            => \$force,
  33.     "reload!"        => \$reload,
  34. );
  35.  
  36. if ($> != 0) {
  37.     print STDERR sprintf(gettext("%s must be run as root"), $0)."\n";
  38.     exit 1;
  39. }
  40.  
  41. Debconf::Db->load;
  42.  
  43. if ($default_priority) {
  44.     Debconf::Config->priority(Debconf::Question->get('debconf/priority')->value);
  45. }
  46.  
  47. if (lc Debconf::Config->frontend eq 'noninteractive' &&
  48.     ! Debconf::Config->frontend_forced) {
  49.     Debconf::Config->frontend('dialog');
  50. }
  51.  
  52. my $frontend=make_frontend();
  53.  
  54. unless ($unseen_only) {
  55.     Debconf::Config->reshow(1);
  56. }
  57.  
  58. my @packages;
  59. if ($all) {
  60.     @packages=allpackages();
  61.     exit unless @packages;
  62. }
  63. else {
  64.     @packages=@ARGV;
  65.     if (! @packages) {
  66.         print STDERR "$0: ".gettext("please specify a package to reconfigure")."\n";
  67.         exit 1;
  68.     }
  69. }
  70.  
  71. $ENV{DEBCONF_RECONFIGURE}=1;
  72.  
  73. foreach my $pkg (@packages) {
  74.     $frontend->default_title($pkg);
  75.     $frontend->info(undef);
  76.  
  77.     $_=`dpkg --status $pkg`;
  78.     my ($version)=m/Version: (.*)\n/;
  79.     my ($status)=m/Status: (.*)\n/;
  80.     if (! $force) {
  81.         if (! defined $status || $status =~ m/not-installed$/) {
  82.             print STDERR "$0: ".sprintf(gettext("%s is not installed"), $pkg)."\n";
  83.             exit 1;
  84.         }
  85.         if ($status !~ m/ ok installed$/) {
  86.             print STDERR "$0: ".sprintf(gettext("%s is broken or not fully installed"), $pkg)."\n";
  87.             exit 1;
  88.         }
  89.     }
  90.     
  91.     if ($reload) {
  92.         Debconf::Template->load("$infodir/$pkg.templates", $pkg)
  93.             if -e "$infodir/$pkg.templates";
  94.     }
  95.  
  96.     foreach my $info (['prerm',    'upgrade',     $version],
  97.                   ['config',   'reconfigure', $version],
  98.               ['postinst', 'configure',   $version]) {
  99.         my $script=shift @$info;
  100.         next unless -x "$infodir/$pkg.$script";
  101.  
  102.         my $is_confmodule='';
  103.  
  104.         if ($script ne 'config') {
  105.             open (IN, "<$infodir/$pkg.$script");
  106.             while (<IN>) {
  107.                 if (/confmodule/i) {
  108.                     $is_confmodule=1;
  109.                     last;
  110.                 }
  111.             }
  112.             close IN;
  113.         }
  114.         
  115.         if ($script eq 'config' || $is_confmodule) {
  116.             my $confmodule=make_confmodule(
  117.                 "$infodir/$pkg.$script", @$info);
  118.     
  119.             $confmodule->owner($pkg);
  120.         
  121.             1 while ($confmodule->communicate);
  122.     
  123.             exit $confmodule->exitcode if $confmodule->exitcode > 0;
  124.         }
  125.         else {
  126.             Debconf::Db->save;
  127.             
  128.             delete $ENV{DEBIAN_HAS_FRONTEND};
  129.             my $ret=system("$infodir/$pkg.$script", @$info);
  130.             if (int($ret / 256) != 0) {
  131.                 exit int($ret / 256);
  132.             }
  133.             $ENV{DEBIAN_HAS_FRONTEND}=1;
  134.             
  135.             Debconf::Db->load;
  136.         }
  137.     }
  138. }
  139.  
  140. $frontend->shutdown;
  141.  
  142. Debconf::Db->save;
  143.  
  144. sub allpackages {
  145.     my @ret;
  146.     local $/="\n\n";
  147.     
  148.     open (STATUS, "</var/lib/dpkg/status")
  149.         || die sprintf(gettext("Cannot read status file: %s"), $!);
  150.     while (<STATUS>) {
  151.         push @ret, $1
  152.             if m/Status:\s*.*\sinstalled\n/ && m/Package:\s*(.*)\n/;
  153.     }
  154.     close STATUS;
  155.  
  156.     return sort @ret;
  157. }
  158.  
  159.